unit uFrmImpEtiqueta;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QuickRpt, ExtCtrls, QRCtrls, Uni, Generics.Collections, DB,
  DBTables, FMTBcd, SqlExpr, MemDS, DBAccess, uRelatorios, uCalculo, DBClient,
  uMensagensSistema;

type
  TfrmImpEtiqueta = class(TForm)
    UniQuery: TUniQuery;
    UniQueryidproduto: TIntegerField;
    UniQuerydescricao: TStringField;
    qrImpEtiqueta: TQuickRep;
    TitleBand1: TQRBand;
    DetailBand1: TQRBand;
    QRDBText2: TQRDBText;
    UniQuerycodbarra: TStringField;
    qrImagem: TQRImage;
    cdImpEtiqueta: TClientDataSet;
    cdImpEtiquetaidproduto: TIntegerField;
    cdImpEtiquetadescricao: TStringField;
    cdImpEtiquetacodbarra: TStringField;
    procedure FormCreate(Sender: TObject);
    procedure DetailBand1BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure qrImpEtiquetaBeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
  private
    { Private declarations }
    Calculo          : TCalculo;
    fQuantidade      : Integer;
    lista            : TList<TProdutoItem>;
    fProdInicial     : Integer;
    fProdFinal       : Integer;
  public
    { Public declarations }
    procedure ConfiguraConexaoQuery;
    procedure PreencheCliDataSet;

    property Quantidade  : Integer read fQuantidade write fQuantidade;
    property ProdInicial : Integer read fProdInicial write fProdInicial;
    property ProdFinal   : Integer read fProdFinal write fProdFinal;
  end;

var
  frmImpEtiqueta: TfrmImpEtiqueta;

implementation

uses uDmUniSQLConexao;

{$R *.dfm}


procedure TfrmImpEtiqueta.ConfiguraConexaoQuery;
var
  item     : TProdutoItem;
begin
   try
     UniQuery.Connection := dmUniSQLConexao.UniConnection;

     UniQuery.Close;
     UniQuery.SQL.Clear;

     UniQuery.Params.CreateParam(ftInteger, 'produtoIni', ptInput);
     UniQuery.Params.CreateParam(ftInteger, 'produtoFin', ptInput);

     UniQuery.SQL.Add('select idproduto, descricao, codbarra from "produto"');
     UniQuery.SQL.Add('where idproduto >= :produtoIni and idproduto <= :produtoFin ');

     UniQuery.Params.ParamByName('produtoIni').AsInteger := ProdInicial;
     UniQuery.Params.ParamByName('produtoFin').AsInteger := ProdFinal;


     UniQuery.Open;

     if not uniQuery.IsEmpty then
     begin
         while not uniQuery.Eof do
          begin
             item := TProdutoItem.create;

             item.Produto.idProduto  := uniQuery.FieldByName('idproduto').AsInteger;
             item.Produto.descricao  := uniQuery.FieldByName('descricao').AsString;
             item.Produto.codbarra   := uniQuery.FieldByName('codbarra').AsString;

             if item.Produto.codbarra <> '' then
             begin
               lista.Add(item);
               lista.Items[lista.Count-1].Produto.idProduto  := item.Produto.idProduto;
               lista.Items[lista.Count-1].Produto.descricao  := item.Produto.descricao;
               lista.Items[lista.Count-1].Produto.codbarra   := item.Produto.codbarra;
             end;

             uniQuery.Next;
          end;
     end
     else
       MensagemAviso('Nada para imprimir!');
   except on e: exception do
    begin
       lista := nil;
    end;
   end;
end;

procedure TfrmImpEtiqueta.DetailBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
var
  i : integer;
begin
   if cdImpEtiquetacodbarra.AsString <> '' then
      Calculo.GeraBarrasEAN13( cdImpEtiquetacodbarra.AsString, qrImagem.Canvas);
end;

procedure TfrmImpEtiqueta.FormCreate(Sender: TObject);
begin
  Calculo    := TCalculo.Create;
  lista      := TList<TProdutoItem>.Create;
  Quantidade := 2;
  cdImpEtiqueta.CreateDataSet;
  cdImpEtiqueta.Open;
end;

procedure TfrmImpEtiqueta.FormDestroy(Sender: TObject);
begin
  cdImpEtiqueta.Destroy;
end;

procedure TfrmImpEtiqueta.PreencheCliDataSet;
var
  I, Y : integer;
begin
  ConfiguraConexaoQuery;

  for I := 0 to Lista.Count - 1 do
  begin
    for y := 0 to Quantidade - 1 do
    begin
      cdImpEtiqueta.Append;
      cdImpEtiquetaidproduto.Value := lista.Items[i].Produto.idProduto;
      cdImpEtiquetadescricao.Value := lista.Items[i].Produto.descricao;
      cdImpEtiquetacodbarra.Value  := lista.Items[i].Produto.codbarra;
    end;
  end;

end;

procedure TfrmImpEtiqueta.qrImpEtiquetaBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  PreencheCliDataSet;
end;

end.
